//package com.cd.sendRequest.entity;
//
//import okhttp3.*;
//import java.io.IOException;
//import java.util.*;
//import java.util.regex.Matcher;
//import java.util.regex.Pattern;
//
//public class GenericCurlExecutorNew {
//
//    private static final OkHttpClient client = new OkHttpClient();
//
//    // 正则：匹配 URL（支持单/双引号）
//    private static final Pattern URL_PATTERN = Pattern.compile("curl\\s+['\"](https?://[^'\"]+)['\"]", Pattern.CASE_INSENSITIVE);
//
//    // 正则：匹配方法 (-X POST 或 --request POST)
//    private static final Pattern METHOD_PATTERN = Pattern.compile("(-X|--request)\\s+([A-Z]+)", Pattern.CASE_INSENSITIVE);
//
//    // 正则：匹配 header (-H 'k: v' 或 --header "k: v")
//    private static final Pattern HEADER_PATTERN = Pattern.compile("(-H|--header)\\s+((['\"]).*?\\3)", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
//
//    // 正则：匹配 body (-d, --data, --data-raw)
//    private static final Pattern DATA_PATTERN = Pattern.compile("(-d|--data|--data-raw)\\s+((['\"]).*?\\3)", Pattern.CASE_INSENSITIVE | Pattern.DOTALL);
//
//    /**
//     * 通用方法：传入 curl 命令字符串，自动解析并发送请求
//     */
//    public static Response sendCurlRequest(String curlCommand) throws IOException {
//        if (curlCommand == null || curlCommand.trim().isEmpty()) {
//            throw new IllegalArgumentException("curlCommand 不能为空");
//        }
//
//        // 1. 清理换行和多余空格
//        String cleaned = curlCommand
//                .replaceAll("\\\\\\s*\\r?\\n", " ")   // 移除 \ 换行
//                .replaceAll("\\r?\\n", " ")           // 移除普通换行
//                .replaceAll("\\s+", " ")              // 合并连续空白
//                .trim();
//
//        // 2. 提取 URL
//        String url = extractUrl(cleaned);
//        if (url == null) {
//            throw new IllegalArgumentException("未找到有效的 URL");
//        }
//
//        // 3. 提取 method
//        String method = extractMethod(cleaned);
//
//        // 4. 提取所有 headers（含 cookie）
//        Map<String, String> headers = new LinkedHashMap<>();
//        String cookieHeader = extractHeadersAndCookie(cleaned, headers);
//
//        // 5. 提取 body
//        String body = extractBody(cleaned);
//
//        // 6. 构建 OkHttp 请求
//        Request.Builder requestBuilder = new Request.Builder().url(url);
//
//        // 设置 headers
//        for (Map.Entry<String, String> entry : headers.entrySet()) {
//            // 跳过原始 cookie header，我们后面统一设置（避免重复）
//            if (!"cookie".equalsIgnoreCase(entry.getKey())) {
//                requestBuilder.header(entry.getKey(), entry.getValue());
//            }
//        }
//
//        // 单独设置 cookie（OkHttp 推荐通过 header 设置）
//        if (cookieHeader != null && !cookieHeader.trim().isEmpty()) {
//            requestBuilder.header("Cookie", cookieHeader);
//        }
//
//        // 设置 body（仅对 POST/PUT 等有 body 的方法）
//        if (body != null && ("POST".equals(method) || "PUT".equals(method) || "PATCH".equals(method))) {
//            MediaType mediaType = getMediaTypeFromHeaders(headers);
//            RequestBody requestBody = RequestBody.create(mediaType, body);
//            requestBuilder.method(method, requestBody);
//        } else {
//            // GET / HEAD / DELETE 等无 body
//            requestBuilder.method(method, null);
//        }
//
//        Request request = requestBuilder.build();
//        return client.newCall(request).execute();
//    }
//
//    // --- 辅助方法 ---
//
//    private static String extractUrl(String cleaned) {
//        Matcher m = URL_PATTERN.matcher(cleaned);
//        return m.find() ? m.group(1) : null;
//    }
//
//    private static String extractMethod(String cleaned) {
//        Matcher m = METHOD_PATTERN.matcher(cleaned);
//        return m.find() ? m.group(2) : "GET";
//    }
//
//    private static String extractHeadersAndCookie(String cleaned, Map<String, String> headers) {
//        Matcher m = HEADER_PATTERN.matcher(cleaned);
//        StringBuilder allCookies = new StringBuilder();
//
//        while (m.find()) {
//            String quoted = m.group(2);
//            String content = unquote(quoted);
//            int sep = content.indexOf(':');
//            if (sep > 0) {
//                String key = content.substring(0, sep).trim();
//                String value = content.substring(sep + 1).trim();
//                String lowerKey = key.toLowerCase();
//
//                headers.put(key, value);
//
//                if ("cookie".equals(lowerKey)) {
//                    if (allCookies.length() > 0) allCookies.append("; ");
//                    allCookies.append(value);
//                }
//            } else {
//                headers.put(content, "");
//            }
//        }
//        return allCookies.length() > 0 ? allCookies.toString() : null;
//    }
//
//    private static String extractBody(String cleaned) {
//        Matcher m = DATA_PATTERN.matcher(cleaned);
//        if (m.find()) {
//            String quoted = m.group(2);
//            return unquote(quoted);
//        }
//        return null;
//    }
//
//    private static MediaType getMediaTypeFromHeaders(Map<String, String> headers) {
//        String contentType = headers.get("content-type");
//        if (contentType != null) {
//            return MediaType.parse(contentType);
//        }
//        return MediaType.get("application/octet-stream");
//    }
//
//    private static String unquote(String str) {
//        if (str == null || str.length() < 2) return str;
//        char first = str.charAt(0);
//        char last = str.charAt(str.length() - 1);
//        if ((first == '\'' && last == '\'') || (first == '"' && last == '"')) {
//            return str.substring(1, str.length() - 1);
//        }
//        return str;
//    }
//
//    // --- 示例用法 ---
//    public static void main(String[] args) throws IOException {
//        String curl = "";
//
//        try (Response response = sendCurlRequest(curl)) {
//            System.out.println("Status: " + response.code());
//            System.out.println("Body: " + response.body().string());
//        }
//    }
//}